package model

import (
	"gitee.com/liumou_site/gcs"
	"gitee.com/liumou_site/logger"
	"path/filepath"
)

// RestoreSSHDefaultStart 用于恢复SSH的默认配置和二进制文件。
// 该函数依次调用 RestoreSSHDefault 和 RestoreSSHDefaultBinFile 方法，
// 如果在执行过程中遇到错误，则立即返回错误信息。
//
// 返回值:
//   - error: 如果恢复过程中出现错误，则返回相应的错误信息；否则返回 nil。
func (i Info) RestoreSSHDefaultStart() error {
	// 首先尝试恢复SSH的默认配置
	err := i.RestoreSSHDefault()
	if err != nil {
		return err
	}

	// 然后尝试恢复SSH的默认二进制文件
	err = i.RestoreSSHDefaultBinFile()
	if err != nil {
		return err
	}
	return nil
}

// RestoreSSHDefault 用于恢复SSH的默认配置。
// 该函数首先检查SSH服务是否正在运行，如果正在运行则放弃还原操作。
// 如果SSH服务未运行，则删除当前配置文件，并将备份的默认配置文件复制到指定位置。
// 函数会根据Info结构体中的China字段决定日志输出的语言（中文或英文）。
//
// 返回值:
//   - error: 如果操作过程中出现错误，返回相应的错误信息；否则返回nil。
func (i Info) RestoreSSHDefault() error {
	run := gcs.NewShell()
	// 根据Debug标志输出开始还原的日志信息
	if i.Debug {
		GetLanguageManager().Debug("开始恢复默认配置", "Start restoring init configuration")
	}

	// 检查SSH服务是否正在运行，如果正在运行则放弃还原操作
	if i.Cmd.ProcessIsRunning("sshd") {
		GetLanguageManager().Debug("ssh服务正在运行，放弃还原默认配置", "ssh service is running, unable to restore init configuration")
		return nil
	}

	// 删除当前配置文件
	i.Cmd.RunShell("rm -rf ", i.Source)
	if i.Cmd.Err != nil {
		GetLanguageManager().Error("删除源文件失败: ", "Failed to delete source file: ", i.Cmd.Err.Error())
		return i.Cmd.Err
	} else {
		GetLanguageManager().Info("删除源文件成功: ", "Delete source file successfully: ", i.Cmd.Text)
	}

	// 将备份的默认配置文件复制到指定位置
	run.RunShell("cp -rf ", i.Dst, " ", i.Source)
	logger.Debug(run.Text)
	if i.Cmd.Err != nil {
		GetLanguageManager().Error("还原默认配置失败: ", "Failed to restore init configuration: ", i.Cmd.Err.Error())
		logger.Debug(run.Text)
		return i.Cmd.Err
	} else {
		logger.Debug(run.Text)
		GetLanguageManager().Info("还原默认配置成功", "Restore init configuration successfully")
	}
	return nil
}
func (i Info) RestoreSSHDefaultBinFile() error {
	// 还原SSHD 二进制文件
	err := i.copyBib(filepath.Join(i.Target, "sshd"), "/usr/sbin/sshd")
	if err != nil {
		GetLanguageManager().Error("还原SSHD 二进制文件失败: ", "Failed to restore SSHD binary file: ", err.Error())
		return err
	}
	// 还原SSH 二进制文件
	err = i.copyBib(filepath.Join(i.Target, "ssh"), "/usr/bin/ssh")
	if err != nil {
		GetLanguageManager().Error("还原SSH 二进制文件失败: ", "Failed to restore SSH binary file: ", err.Error())
		return err
	}

	return nil
}

func (i Info) copyBib(src, dst string) error {
	//// 还原SSHD 二进制文件
	//f := gf.NewFileMan(filepath.Join(i.Target, "sshd"), "/usr/sbin/sshd")
	//f.Copy()
	i.Cmd.RunShell("cp -rf ", src, " ", dst)
	if i.Cmd.Err != nil {
		GetLanguageManager().Error("还原SSHD 二进制文件失败: ", "Failed to restore SSHD binary file: ", i.Cmd.Err.Error())
		return i.Cmd.Err
	} else {
		GetLanguageManager().Info("还原SSHD 二进制文件成功: ", "Restore SSHD binary file successfully: ", i.Cmd.Text)
	}
	return nil
}
